﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

using MySql.Data.MySqlClient;

namespace MakeIT.MiraPark.Negocios
{
    public static partial class ModelBO
    {

        public static ObjetoVO getObjeto(int? idObjeto, string objeto)
        {
            ObjetoVO objetoVO = null;
            List<ObjetoVO> listObjetoVOs = getObjetos(idObjeto, objeto);
            if (listObjetoVOs != null && listObjetoVOs.Count > 0)
            {
                objetoVO = listObjetoVOs[0];
            }
            return objetoVO;
        }

        public static List<ObjetoVO> getObjetos(bool comUsuarios, bool comPerfis)
        {
            List<ObjetoVO> objetos = getObjetos();
            if (comUsuarios)
            {
                foreach (ObjetoVO objeto in objetos)
                {
                    getUsuarioXObjetos(objeto);
                }
            }
            if (comPerfis)
            {
                foreach (ObjetoVO objeto in objetos)
                {
                    getPerfilXObjetos(objeto);
                }
            }
            return objetos;
        }


        public static List<ObjetoVO> getObjetos()
        {
            return getObjetos(null,null);
        }
        
        public static List<ObjetoVO> getObjetos(int? idObjeto, string objeto)
        {
            string where = "WHERE ";
            StringBuilder query = new StringBuilder();

            query.AppendLine("SELECT IdObjeto, Objeto, Descricao ");
            query.AppendLine("FROM objeto ");
            if (idObjeto != null)
            {
                query.AppendLine(where + "IdObjeto=?IdObjeto ");
                where = "AND ";
            }
            if (objeto != null)
            {
                query.AppendLine(where + "Objeto=?Objeto ");
                where = "AND ";
            }

            query.AppendLine("ORDER BY objeto ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            if (idObjeto != null) cmd.Parameters.AddWithValue("?IdObjeto", idObjeto);
            if (objeto != null) cmd.Parameters.AddWithValue("?Objeto", objeto);

            MySqlDataReader reader = null;
            try
            {
                cmd.Connection.Open();

                reader = cmd.ExecuteReader();

                List<ObjetoVO> listObjeto = new List<ObjetoVO>();

                while (reader.Read())
                {
                    ObjetoVO objetoVO = ObjetoVO.CreateObjetoVO();
                    objetoVO.idObjeto = reader.GetInt32("IdObjeto");
                    objetoVO.objeto = reader.GetString("Objeto");
                    objetoVO.descricao = reader.GetString("Descricao");

                    listObjeto.Add(objetoVO);
                }
                reader.Close();
                return listObjeto;
            }
            catch (Exception ex){ throw ex; }
            finally { cmd.Connection.Close(); }
        }

        public static void setObjeto(ObjetoVO objetoVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("UPDATE objeto ");
            query.AppendLine("SET Objeto=?Objeto, Descricao=?Descricao ");
            query.AppendLine("WHERE IdObjeto=?IdObjeto ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdObjeto", objetoVO.idObjeto);
            cmd.Parameters.AddWithValue("?Objeto", objetoVO.objeto);
            cmd.Parameters.AddWithValue("?Descricao", objetoVO.descricao);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static long newObjeto(ObjetoVO objetoVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("INSERT INTO objeto ");
            query.AppendLine("SET Objeto=?Objeto, Descricao=?Descricao ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?Objeto", objetoVO.objeto);
            cmd.Parameters.AddWithValue("?Descricao", objetoVO.descricao);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
                return cmd.LastInsertedId;
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static void delObjeto(ObjetoVO objetoVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("DELETE FROM objeto ");
            query.AppendLine("WHERE IdObjeto=?IdObjeto ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdObjeto", objetoVO.idObjeto);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }
    }
}
